/*
 * File:                IController.cs
 * Authors:             
 * Company:             Sandia National Laboratories
 * Project:             MVC
 *
 * Copyright 2008, Sandia Corporation.  Under the terms of Contract
 * DE-AC04-94AL85000, there is a non-exclusive license for use of this work by
 * or on behalf of the U.S. Government. Export of this program may require a
 * license from the United States Government. See CopyrightHistory.txt for
 * complete details.
 *
 * Reviewers:
 * Review Date:
 * Review Comments:
 *
 * Revision History:
 *
 * $Log: IController.cs,v $
 * Revision 1.16  2008/10/28 14:41:48  bstitus
 * In IController, rearranged the order of Add/Remove methods so they are together; Add then Remove.  Added declarations for Add/Remove for IImporter and IExporter collections.  Bug #1254
 *
 * Revision 1.15  2008/10/14 19:38:54  bstitus
 * Changed four instances of "add" to "remove" per the code review for bug #1253.
 *
 * Revision 1.14  2008/10/14 19:34:42  bstitus
 * Added the file header that JT sent me in resolution of bug #1252.
 *
 *
 */

using Sandia.MVCFramework.Common;
using Sandia.MVCFramework.DataAccessor;
using Sandia.MVCFramework.DataAnalyzer;
using Sandia.MVCFramework.DataStore;
using Sandia.MVCFramework.ExportTools;
using Sandia.MVCFramework.Request;
using Sandia.MVCFramework.View;
using Sandia.MVCFramework.ViewManager;

using System;
using System.Collections.Generic;

namespace Sandia.MVCFramework.Controller
{
    /// <summary>
    /// Interface to be implemented by classes that act as controllers
    /// </summary>
    public interface IController : IRequestRouter, IPublisher, IStartable
    {
        /// <summary>
        /// Adds a data accessor to the collection
        /// of data accessors the controller is aware of
        /// </summary>
        /// <param name="dataAccessor">The data accessor
        /// to add</param>
        void AddDataAccessor(IDataAccessor dataAccessor);

        /// <summary>
        /// Removes a data accessor from the collection
        /// of data accessors the controller is aware of
        /// </summary>
        /// <param name="dataAccessor">The data accessor
        /// to remove</param>
        void RemoveDataAccessor(IDataAccessor dataAccessor);

        /// <summary>
        /// Adds a data analyzer to the collection
        /// of data analyzers the controller is aware of
        /// </summary>
        /// <param name="dataAnalyzer">The data analyzer
        /// to add</param>
        void AddDataAnalyzer(IDataAnalyzer dataAnalyzer);

        /// <summary>
        /// Removes a data analyzer from the collection
        /// of data analyzers the controller is aware of
        /// </summary>
        /// <param name="dataAnalyzer">The data analyzer
        /// to remove</param>
        void RemoveDataAnalyzer(IDataAnalyzer dataAnalyzer);

        /// <summary>
        /// Adds a data store to the collection
        /// of data stores the controller is aware of
        /// </summary>
        /// <param name="dataStore">The data store
        /// to add</param>
        void AddDataStore(IDataStore dataStore);

        /// <summary>
        /// Removes a data store from the collection
        /// of data stores the controller is aware of
        /// </summary>
        /// <param name="dataStore">The data store
        /// to add</param>
        void RemoveDataStore(IDataStore dataStore);

        /// <summary>
        /// Adds a view manager to the collection
        /// of view managers the controller is aware of
        /// </summary>
        /// <param name="viewManager">The view manager
        /// to add</param>
        void AddViewManager(IViewManager viewManager);

        /// <summary>
        /// Removes a view manager from the collection
        /// of view managers the controller is aware of
        /// </summary>
        /// <param name="viewManager">The view manager
        /// to remove</param>
        void RemoveViewManager(IViewManager viewManager);

        /// <summary>
        /// Add an importer, if not already present, to the collection
        /// of importers for this controller
        /// </summary>
        /// <param name="importer">the importer</param>
        void AddImporter(IImporter importer);

        /// <summary>
        /// Remove an importer, if present, from the collection
        /// of importers for this controller
        /// </summary>
        /// <param name="importer">the importer</param>
        void RemoveImporter(IImporter importer);

        /// <summary>
        /// Add an exporter, if not already present, to the collection
        /// if exporters for this controller
        /// </summary>
        /// <param name="exporter">the exporter</param>
        void AddExporter(IExporter exporter);

        /// <summary>
        /// Remove and exporter, if present, from the collection
        /// of exporters for this controller
        /// </summary>
        /// <param name="exporter">the exporter</param>
        void RemoveExporter(IExporter exporter);
    }
}
    